﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using Torneo.BusinessLogic;
using Torneo.Entidades;

namespace Torneo.InterfazServicios
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service" in code, svc and config file together.
    public class Service : IService
    {
        #region Administradores
        public void CrearUsuario(Usuario usuario)
        {
            UsuarioBLL usuarioBl = new UsuarioBLL();
            usuarioBl.AgregarUsuario(usuario);
        }

        public void EliminarUsuario(Usuario usuario)
        {
            UsuarioBLL usuarioBl = new UsuarioBLL();
            usuarioBl.EliminarUsuario(usuario);
        }

        public List<Usuario> ObtenerUsuarios()
        {
            UsuarioBLL usuarioBl = new UsuarioBLL();
            return usuarioBl.ObtenerUsuarios();
        }

        public Usuario AutenticarUsuario(string user, string password)
        {
            UsuarioBLL usuarioBl = new UsuarioBLL();
            return usuarioBl.AutenticarUsuario(user, password);
        }

        public void ModificarUsuario(Usuario usuario)
        {
            UsuarioBLL usuarioBl = new UsuarioBLL();
            usuarioBl.ModificarUsuario(usuario);
        }

        public Usuario ObtenerUsuariosPorId(int id)
        {
            UsuarioBLL usuarioBl = new UsuarioBLL();
            return usuarioBl.ObtenerUsuariosPorId(id);
        }    
        #endregion

        #region Jugadores
        public void CrearJugador(Jugador jugador)
        {
            JugadorBLL jugadorBl = new JugadorBLL();
            jugadorBl.AgregarJugador(jugador);
        }

        public void EliminarJugador(Jugador jugador)
        {
            JugadorBLL jugadorBl = new JugadorBLL();
            jugadorBl.EliminarJugador(jugador);
        }

        public List<Jugador> ObtenerJugadores()
        {
            JugadorBLL jugadorBl = new JugadorBLL();
            return jugadorBl.ObtenerJugadores();
        }

        public void ModificarJugador(Jugador jugador)
        {
            JugadorBLL jugadorBl = new JugadorBLL();
            jugadorBl.ModificarJugador(jugador);
        }

        public Jugador ObtenerJugadorPorId(int id)
        {
            JugadorBLL jugadorBl = new JugadorBLL();
            return jugadorBl.ObtenerJugadorPorId(id);
        }

        public List<Jugador> ObtenerJugadoresSinEmparejamiento()
        {
            JugadorBLL jugadorBl = new JugadorBLL();
            return jugadorBl.ObtenerJugadoresSinEmparejamiento();
        }

        #endregion

        #region Resultados
        public void AgregarResultado(Resultado resultado)
        {
            ResultadoBLL resultadoBl = new ResultadoBLL();
            resultadoBl.AgregarResultado(resultado);
        }
        public Resultado ObtenerResultado(Emparejamiento emparejamiento)
        {
            ResultadoBLL resultadoBl = new ResultadoBLL();
            return resultadoBl.ObtenerResultado(emparejamiento);
        }
        
        public void ModificarResultado(Resultado resultado)
        {
            ResultadoBLL resultadoBl = new ResultadoBLL();
            resultadoBl.ModificarResultado(resultado);
        }
        public List<Resultado> ObtenerTodos()
        {
            ResultadoBLL resultadoBl = new ResultadoBLL();
            return resultadoBl.ObtenerTodos();
        }
        #endregion

        #region Emparejamientos

        public void CrearEmparejamiento(Emparejamiento emparejamiento)
        {
            EmparejamientoBLL emparejamientoBl = new EmparejamientoBLL();
            emparejamientoBl.AgregarEmparejamiento(emparejamiento);
        }

        public void EliminarEmparejamiento(Emparejamiento emparejamiento)
        {
            EmparejamientoBLL emparejamientoBl = new EmparejamientoBLL();
            emparejamientoBl.EliminarEmparejamiento(emparejamiento);
        }
        public List<Emparejamiento> ObtenerEmparejamientos()
        {
            EmparejamientoBLL emparejamientoBl = new EmparejamientoBLL();
            return emparejamientoBl.ObtenerEmparejamientos();
        }
        public void ModificarEmparejamiento(Emparejamiento emparejamiento)
        {
            EmparejamientoBLL emparejamientoBl = new EmparejamientoBLL();
            emparejamientoBl.ModificarEmparejamiento(emparejamiento);
        }
        public Emparejamiento ObtenerEmparejamientoPorId(int id)
        {
            EmparejamientoBLL emparejamientoBl = new EmparejamientoBLL();
            return emparejamientoBl.ObtenerEmparejamientoPorId(id);
        }

        public List<Emparejamiento> ObtenerEmparejamientosSinResultado()
        {
            EmparejamientoBLL emparejamientoBl = new EmparejamientoBLL();
            return emparejamientoBl.ObtenerEmparejamientosSinResultado();
        }

        #endregion

        #region WP


        public List<EmparejamientoWP> ObtenerEmparejamientosWP()
        {
            List<EmparejamientoWP> list = new List<EmparejamientoWP>();
            EmparejamientoBLL emparejamientoBl = new EmparejamientoBLL();
            EmparejamientoWP emp;
            foreach (Emparejamiento item in emparejamientoBl.ObtenerEmparejamientos())
            {
                emp = new EmparejamientoWP();
                if (item.JugadorA != null)
                {
                    emp.ApellidoA = item.JugadorA.Apellido;
                    emp.NombreA = item.JugadorA.Nombre;
                    emp.ImagenA = item.JugadorA.Imagen;
                }
                if (item.JugadorB != null)
                {
                    emp.ApellidoB = item.JugadorB.Apellido;
                    emp.NombreB = item.JugadorB.Nombre;
                    emp.ImagenB = item.JugadorB.Imagen;
                }
                emp.Fecha = item.Fecha;
                emp.Fase = item.Fase;
                list.Add(emp);
            }

            return list;
        }

        public List<ResultadoWP> ObtenerResultadoWP()
        {
            List<ResultadoWP> list = new List<ResultadoWP>();
            EmparejamientoBLL emparejamientoBl = new EmparejamientoBLL();
            ResultadoBLL resultadoBl = new ResultadoBLL();
            ResultadoWP res;
            List<Resultado> resultados = resultadoBl.ObtenerTodos();
            foreach (Resultado item in resultados)
            {
                res = new ResultadoWP();
                item.Emparejamiento = emparejamientoBl.ObtenerEmparejamientoPorId(item.Emparejamiento.EmparejamientoId);
                if (item.Emparejamiento.JugadorA != null)
                {
                    res.ApellidoA = item.Emparejamiento.JugadorA.Apellido;
                    res.NombreA = item.Emparejamiento.JugadorA.Nombre;
                    res.ImagenA = item.Emparejamiento.JugadorA.Imagen;
                }
                if (item.Emparejamiento.JugadorB != null)
                {
                    res.ApellidoB = item.Emparejamiento.JugadorB.Apellido;
                    res.NombreB = item.Emparejamiento.JugadorB.Nombre;
                    res.ImagenB = item.Emparejamiento.JugadorB.Imagen;
                }
                res.Fecha = item.Emparejamiento.Fecha;
                res.Fase = item.Emparejamiento.Fase;
                res.ResultadoA = item.ResultadoA;
                res.ResultadoB = item.ResultadoB;
                list.Add(res);
            }

            return list;
        }

        #endregion

    }
}
